﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using CodeCamp2011.Models;
using System.IO;
using System.Text.RegularExpressions;

namespace CodeCamp2011.Controllers
{
    public class PerfilController : ApplicationController
    {
        public ActionResult Ver(string id)
        {
            using (CodeCampDbContext db = new CodeCampDbContext())
            {
                var user = db.Usuarios.FirstOrDefault(u => u.NombreUsuario == id);

                if (user == null)
                {
                    return RedirectToAction("Index", "Home");
                }

                ViewData.Model = user;
            }

            return View();
        }

        [Authorize]
        [HttpPost]
        public ActionResult SubirFoto()
        {
            if (Request.Files.Count <= 0)
                return Json(new { Ok = false });

            var file = Request.Files[0];

            var array = file.FileName.Split('.');
            string extension = array[array.Length - 1];

            var nombreArchivo = Guid.NewGuid().ToString() + "." + extension;
            file.SaveAs(Server.MapPath("~/FotosUsuarios/") + nombreArchivo);

            using (CodeCampDbContext db = new CodeCampDbContext())
            {
                var usuarioActual = db.Usuarios.FirstOrDefault(user => user.NombreUsuario == System.Web.HttpContext.Current.User.Identity.Name);
                usuarioActual.Foto = nombreArchivo;

                db.SaveChanges();
            }

            return Json(new { Ok = true, FotoUsuario = nombreArchivo });
        }

        [HttpPost]
        public ActionResult Update(string Nombre, string SobreMi, string Musica, string Peliculas, string Libros)
        {
            using (CodeCampDbContext db = new CodeCampDbContext())
            {
                var usuarioActual = db.Usuarios.FirstOrDefault(x => 
                    x.NombreUsuario == System.Web.HttpContext.Current.User.Identity.Name
                    || x.Email == System.Web.HttpContext.Current.User.Identity.Name);

                usuarioActual.Nombre = Nombre;
                usuarioActual.Musica = Musica;
                usuarioActual.Peliculas = Peliculas;
                usuarioActual.Libros = Libros;

                db.SaveChanges();
            }

            return Json(new { Ok = true });
        }

        [Authorize]
        public JsonResult Votar(string nombreUsuario, int puntaje)
        {
            Usuario usuarioActual;
            Usuario usuarioVotado;

            using (var db = new CodeCampDbContext())
            {
                usuarioVotado = db.Usuarios.FirstOrDefault(user => user.NombreUsuario == nombreUsuario);
                usuarioActual = db.Usuarios.FirstOrDefault(user => user.NombreUsuario == System.Web.HttpContext.Current.User.Identity.Name);

                if (usuarioVotado == usuarioActual)
                    return Json(new { Error = "No te podes votar a vos mismo." });

                Voto votoUsuario = db.Votos.SingleOrDefault(x => x.UsuarioA == usuarioVotado && x.UsuarioDe == usuarioActual);

                if (votoUsuario == null)
                {
                    votoUsuario = new Voto
                    {
                        Puntaje = puntaje,
                        UsuarioA = usuarioVotado,
                        UsuarioDe = usuarioActual
                    };

                    db.Votos.Add(votoUsuario);
                }
                else
                    votoUsuario.Puntaje = puntaje;

                db.SaveChanges();
            }


            return Json(new { });
        }
    }
}
